package webbrow.board.report.model;

import java.util.List;

import org.mybatis.spring.SqlSessionTemplate;

import webbrow.board.component.BoardReportDao;
import webbrow.board.vo.BoardReportHistoryListVO;
import webbrow.board.vo.BoardReportHistoryVO;
import webbrow.board.vo.ReportVO;

public class BoardReportDaoImpl implements BoardReportDao {
	// db와 연결하기 위해 sqlSessionTemplate 선언
	private SqlSessionTemplate sqlSessionTemplate;
	// 생성자에 sqlSessionTemplate 주입
	public BoardReportDaoImpl(SqlSessionTemplate sqlSessionTemplate){
		super();
		this.sqlSessionTemplate=sqlSessionTemplate;
	}
	/**
	 * insertReport
	 * id 와 no(글번호)를 입력받아
	 * 신고 내역을 삽입한다.
	 */
	@Override
	public void insertReport(BoardReportHistoryVO hvo) {
		this.sqlSessionTemplate.insert("report.insertReport", hvo);
	}
	/**
	 * selectReportMenu
	 * 모든 신고 사유를 가져온다.
	 * 기본 db 의 report 테이블에 있는 정보
	 * (신고창을 띄울때 사유들을 보여주기 위해)
	 */
	@Override
	public List<ReportVO> selectReportMenu() {
		return this.sqlSessionTemplate.selectList("report.selectReportMenu");
	}
	/**
	 * isExistReport
	 * 글 번호와 아이디를 입력받아 신고횟수를 가져온다
	 * (한 사람이 같은 글을 중복으로 신고하지 못하기 위해)
	 */
	@Override
	public int isExistReport(BoardReportHistoryVO hvo) {
		return this.sqlSessionTemplate.selectOne("report.isExistReport", hvo);
	}
	/**
	 * updateContentType
	 * 신고요청을 10회이상 받은경우 db 의 content_type 에 'red' 값을 넣어준다.
	 */
	@Override
	public void updateContentType(int no) {
		this.sqlSessionTemplate.update("report.updateContentType", no);
	}
	/**
	 * selectReportCount
	 * 어떤 사용자가 신고했는지와 관계없이 해당 글에 대한 총 신고횟수를 반환
	 */
	@Override
	public int selectReportCount(int no) {
		return this.sqlSessionTemplate.selectOne("report.selectReportCount", no);
	}
	/**
	 * 신고 리스트를 가져온다.
	 * 관리자만 확인가능
	 */
	public List<BoardReportHistoryListVO> selectReportList(int no) {
		return this.sqlSessionTemplate.selectList("report.selectReportList", no);
	}
	/**
	 * 해당 글번호에 따른 신고 횟수를 리스트로 가져온다.
	 * 관리자만 확인가능
	 */
	@Override
	public List<BoardReportHistoryVO> selectReportCountList() {
		return this.sqlSessionTemplate.selectList("report.selectReportCountList");
	}
	
	// //////////////////////////////////댓글신고// 부분///////////////////////////////////

	/**
	 * isExistReplyReport 글 번호와 아이디를 입력받아 댓글 신고횟수를 가져온다 (한 사람이 같은 글을 중복으로 신고하지
	 * 못하기 위해)
	 */
	@Override
	public int isExistReplyReport(BoardReportHistoryVO hvo) {
		return this.sqlSessionTemplate.selectOne("report.isExistReplyReport",
				hvo);
	}

	/**
	 * selectReplyReportCount 어떤 사용자가 댓글을 신고했는지와 관계없이 해당 글에 대한 총 신고횟수를 반환
	 */
	@Override
	public int selectReplyReportCount(int no) {
		return this.sqlSessionTemplate.selectOne(
				"report.selectReplyReportCount", no);
	}

	/**
	 * insertReplyReport id 와 no(글번호)를 입력받아 신고 내역을 삽입한다.
	 */
	@Override
	public void insertReplyReport(BoardReportHistoryVO hvo) {
		this.sqlSessionTemplate.insert("report.insertReplyReport", hvo);
	}

	/**
	 * updateReplyContentType 신고요청을 10회이상 받은경우 db 의 content_type 에 'red' 값을
	 * 넣어준다.
	 */
	@Override
	public void updateReplyContentType(int no) {
		this.sqlSessionTemplate.update("report.updateReplyContentType", no);

	}
	@Override
	public void deleteReport(int no) {
		this.sqlSessionTemplate.delete("report.deleteReport", no);
	}
}
